#include <thread>
#include <mutex>
#include <iostream>
using namespace std;

class TA
{
    public:
        void operator() ()
        {
            cout << "class" << endl;
        }
};
void myprint(const int &i, char *pmybuf)
{
    cout << i << endl;
    cout << pmybuf << endl;
    return;
}
// 在创建线程用临时对象是可行的。 线程得到的参数其实就是copy了一份
// 只要
// 若传递值对象，直接值传递给线程，
// 传递类对象，避免隐士类型转换，全部在创建线程哪一行构建临时对象，在函数参数那边用引用来接 否则系统还是会用构造一次
// 建议不使用detach() 只使用join() 这样不存在局部对象失效二导致对内存引用失效
// 用了临时对象后发现所有的类对象就在主线程内构造完毕了
// 传递指针。 用std::move()
int main()
{
    auto lambda = [] {
        cout << "hello lambda" << endl;
    };
    TA test;
    thread tmp([](){cout << "lambda" << endl;});
    tmp.join();
    return 0;

}